package visitor

import (
	"cuelang.org/go/cue/ast"
	"cuelang.org/go/cue/parser"
	"io/ioutil"
)

type CueAstReader struct {
	F *ast.File
}

func From(fileName string) *CueAstReader {
	data, err := ioutil.ReadFile(fileName)
	if err != nil {
		panic(err)
	}
	f, err := parser.ParseFile(fileName, data)
	if err != nil {
		panic(err)
	}
	return &CueAstReader{
		F: f,
	}

}

func (r *CueAstReader) Accept(w *GoWriter) {
	for i, _ := range r.F.Decls {
		switch r.F.Decls[i].(type) {
		case *ast.Field:
			w.visitType(r.F.Decls[i].(*ast.Field))
		case *ast.Package:
			w.visitPackage(r.F.Decls[i].(*ast.Package))
		case *ast.ImportDecl:
			w.visitImport(r.F.Decls[i].(*ast.ImportDecl))
		}
	}
}
